﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using DataTier;
using DataTier.Repository;
using DataTier.Entities;

namespace RusIS.DataServices
{
    [ServiceBehavior(Namespace = WCFSettings.Namespace)]
    public class AuthentificateService : IAuthentificateService
    {
        /// <summary>
        /// Возвращает роль, применяемую к анонимному пользователю
        /// </summary>
        /// <param name="roleId"></param>
        /// <returns></returns>
        public RoleEntity GetAnonimusRole(int roleId)
        {
            var role = new AuthRepository().GetAnonimusRole(roleId);
            return role;

        }

        
        /// <summary>
        /// Возвращает полную информацию о пользователе и его правах доступа
        /// </summary>
        /// <param name="DomainLoginName"></param>
        /// <returns></returns>
        public UserSecurityDetails GetUserSecurityDetails(string DomainLoginName)
        {
            var userDetails = new AuthRepository().GetUserSecurityDetails(DomainLoginName);
            return userDetails;
        }


        /// <summary>
        /// Проводит аутентификацию пользователя
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="hashPassword"></param>
        /// <returns>1-ok, 2-заблокирован, 0 - не верный логин/пароль</returns>
        public int AuthenticateUser(string userName, string hashPassword)
        {
            int auth = new AuthRepository().AuthenticateUser(userName, hashPassword);
            return auth;
        }
        

        /// <summary>
        /// Возвращается список доступных действий по названию права доступа
        /// </summary>
        /// <param name="permissionName"></param>
        /// <returns></returns>
        public List<MVCAction> MVCActionsByPermissionName(string permissionName)
        {
            var actions = new AuthRepository().MVCActionsByPermissionName(permissionName);
            return actions;
        }


        /// <summary>
        /// Возвращается список доступных действий по названию права доступа
        /// </summary>
        /// <param name="permissionId"></param>
        /// <returns></returns>
        public List<MVCAction> MVCActionsByPermissionId(int permissionId)
        {
            var actions = new AuthRepository().MVCActionsByPermissionId(permissionId);
            return actions;
        }


        /// <summary>
        /// Регистрирует нового пользователя
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="hashPassword"></param>
        /// <param name="email"></param>
        /// <returns></returns>
        public UserSecurityDetails RegisterUser(string userName, string hashPassword, string email)
        {
            var user = new UserRepository().RegisterUser(userName, hashPassword, email);
            return user;
        }


        /// <summary>
        /// Формирование Хэша пароля
        /// </summary>
        /// <param name="password"></param>
        /// <returns></returns>
        public string CalcHash(string password)
        {
            return new UserRepository().CalcHash(password);
        }


    }

}
